//	mix
//	字符串混淆等信息
//
// shipengpipi@126.com

package mix

import (
	"github.com/magiconair/properties"
	"log/slog"
	"strings"
	"sync"
)

const DefaultMixStrategyConfigPath = "default.properties"

var (
	dictMap map[string]string
	once    sync.Once
)

// init
//
//	@Description:  初始化
func init() {
	once.Do(func() {
		propertiesFile, err := properties.LoadFile(DefaultMixStrategyConfigPath, properties.UTF8)
		if err != nil {
			panic(err)
		}
		
		dictMap = make(map[string]string)
		for _, key := range propertiesFile.Keys() {
			dictMap[key] = propertiesFile.GetString(key, "")
		}
	})
	slog.Info("dictMap dictMap", "dictMap", dictMap)
}

// 转换方法声明
type Convert func(key string) string

var DefaultConvert = func(key string) string {
	return dictMap[key]
}

// MixValue
//
//	@Description: 	混淆
//	@param value
//	@param convert
//	@return string
func MixValue(value string, convert Convert) string {
	if value == "" {
		return value
	}
	if convert == nil {
		convert = DefaultConvert
	}
	cs := make([]string, 0)
	for _, c := range value {
		cs = append(cs, dictMap[string(c)])
	}
	return strings.Join(cs, "")
}

// MixValueDefault
//
//	@Description:  默认切换器
//	@param value
//	@return string
func MixValueDefault(value string) string {
	return MixValue(string(value), DefaultConvert)
}
